Analyse économétrique de l’émission mondial de CO² en 2020

DELAR Emmarius

FOFANA Mohamed

2024-04-26

1 Présentation du sujet

1.1 Introduction

En 2023, ce n’est pas moins de 40,9 milliards de tonnes de CO² qui ont été émis au niveau mondial et qui participe donc à l’aggravation du changement climatique. A ce stade, il est primordial d’étudier ce phénomène afin de pouvoir mieux le comprendre et prévoir son évolution future. Dans cette analyse, nous chercherons à étudier les facteurs déterminants faisant qu’un pays ait une émission de CO² plus ou moins importante.

1.2 Problématique

Ce rapport se concentre principalement sur les déterminants de la richesse du pays, la structure de sa population, le niveau d’éducation et les conditions de vie de chaque pays.

Nous chercherons donc à travers cette analyse à expliquer la différence d’émissions entre pays à partir de ces facteurs et en utilisant différentes méthodes de modélisation.

D’autres informations, telles que les moyens mis en œuvre et d’autres effets liés aux réglementations visant à lutter contre la pollution, pourraient être déterminantes, cependant ils sont difficilement mesurables, ce qui nous empêche de les inclure dans notre modèle.

1.3 Modèle théorique

En se basant sur le PIB, le taux de mortalité, (mesure du niveau d’éducation), la part des produits manufacturé, le log de la population, (indicateur sur la structure de la population) nous allons modéliser l’émission de CO² par pays. Cependant, il y a une influence du PIB sur le CO² mais également une influence de l’émission de CO² sur le PIB. Cela se traduit par un problème d’endogénéïté.

Equations simultanées :

\(\begin{cases} log(CO²) = {\beta_0}+ {\beta_1}log(PIB) + {\beta_2}X_2 + {\beta_3}X_3 + {\beta_4}X_4+ {\beta_5}X_5 + {\beta_6}X_6 + {\beta_7}X_7 + {\epsilon_C} \\[0.5cm] log(PIB)={\theta_0}+ {\theta_1}log(CO²) + {\theta_2}Z_2 + {\theta_3}Z_3 + {\theta_4}Z_4 + {\epsilon_P} \end{cases}\)

Avec :

  • \(X_2 :\) Pourcentage d’adolescent déscolarisé
  • \(X_3 :\) Pourcentage de la population agé de 15 à 64 ans
  • \(X_4 :\) Population totale
  • \(X_5 :\) Pourcentage de mortalité enfantile pour 1000 nouveaux nés
  • \(X_6 :\) Formation brute de capital fixe en % du PIB
  • \(X_7 :\) Pourcentage des produits manufacturés dans le PIB
  • \(X_8 :\) Pourcentage du commerce dans le PIB (mesure de l’ouverture)

Nous allons utiliser le taux de mortalité, la mesure de l’ouverture et le pourcentage d’adolescent déscolarisé comme instruments dans notre modèle.

\(Z=\) \(\begin{pmatrix} X_2\\X_5 \\ X_8 \end{pmatrix}\)

2 Collecte et traitement des données

Les données utilisées pour traiter notre problématique et réaliser notre modélisation proviennet essentiellement de la plateforme DataBank mis en place par la banque mondiale à l’url : https://databank.worldbank.org/ . De là, nous avons assemblés 10 variables pour un ensemble de 217 observations. Ces variables sont le PIB par tête en dollars constant de 2017, l’émissions de CO2 en tonnes métriques par habitant (variable à expliquer), le pourcentage d’adolescents non scolarisés en age d’être dans le secondaire, le pourcentage de la population entre 15 et 65 ans, la population totale, le taux de mortalité infantile pour 1,000 naissances, la formation brute de capital en pourcentage du PIB, la valeur ajoutée des produits manufacturé et le ratio commerce/PIB.

2.1 Présentation du jeu de données

Le résumé de l’ensemble du jeu de données est donné par :


Résumé statistique des variables
=======================================================================
Statistic                      N    Mean    St. Dev.   Min      Max    
-----------------------------------------------------------------------
GDP_per_capita                194 20,546.32 20,754.67 711.36 112,274.80
Emissions_CO2                 191   3.79      4.61     0.03    31.73   
Adolescents_out_of_school     121   10.42     13.93    0.05    54.48   
Population_15_64              217   63.85     6.29    48.62    83.41   
Mortality_rate                196   20.26     18.78    1.00    80.50   
Gross_fixed_capital_formation 163   22.40     7.50     5.79    56.47   
Manufacturing_percent_of_GDP  187   11.48     7.29     0.34    47.77   
Trade_percent_of_GDP          175   84.14     58.63    9.96    372.27  
-----------------------------------------------------------------------

Nous pouvons visualiser la dispertion de chaqu’une des variables de notre modèle.Certaines d’entre elles ne présentent pas 217 observations cela indique qu’il y a des valeurs manquantes dans notres base de données. Aussi, nous relevons une forte dispersion des valeurs pour l’ensemble des valeurs.

Nous allons visualiser plus en profondeur chaqu’une des variables et le lien qu’elles ont 2 à 2.

3 Analyse descriptive des données

3.1 Statistiques descriptives univarier

# Création d'une fonction pour les boxplots
graph_TD.bp <- function(uneVariable){
  ggplot(data = Emission, aes_string(x = "factor(0)", y = uneVariable)) +
    geom_boxplot() + xlab("") + ylab("") + ggtitle(uneVariable)
}

# Appliquer la fonction aux différentes variables
p0.bp <- graph_TD.bp("Emissions_CO2")
p1.bp <- graph_TD.bp("GDP_per_capita")
p2.bp <- graph_TD.bp("Mortality_rate")
p3.bp <- graph_TD.bp("Manufacturing_percent_of_GDP")
p4.bp <- graph_TD.bp("Trade_percent_of_GDP")
p5.bp <- graph_TD.bp("Adolescents_out_of_school")
p6.bp <- graph_TD.bp("Population_15_64")
p8.bp <- graph_TD.bp("Gross_fixed_capital_formation")
gridExtra::grid.arrange(p0.bp, p1.bp, p2.bp, ncol = 3)

On observe sur ce premier regroupement de boxplot une forte variabilité du taux de mortalité infantile d’autant plus forte une fois la médiane passé. De même pour le PIB par habitant, les valeurs sont très dispercé à passé la médiane et plusieur pays qui se distinguent des autres. Le l’Emission de CO2 quant a lui est plus équilibré (moins de dispersion) et seul 3 valeurs semblent se distinguer des autres.

gridExtra::grid.arrange(p3.bp,p4.bp, p5.bp, ncol=3)

De même sur cette seconde représentation sauf que seulement un individu qui se distigue largement des autres pour Valeur ajoutée manufacturière (% du PIB)

gridExtra::grid.arrange(p6.bp, p8.bp, ncol = 2)

Sur cette dernière représentent on constate une distribution pratiquement proportionel à la médiane pour Pourcentage de la population âgée de 15 à 64 ans . Et aussi des individu se distingue des autres .

3.2 Statistiques bivariées

# Création d'une fonction pour créer des graphiques
graph_TD <- function(uneVariable){
  ggplot(data =Emission, aes_string(x = uneVariable, y = "Emissions_CO2")) + geom_point() 
}

# Graphique du taux de chômage en fonction de chaque variable 1 à 1
p1 <- graph_TD("GDP_per_capita")
p2 <- graph_TD("Mortality_rate")
p3 <- graph_TD("Manufacturing_percent_of_GDP")
p4 <- graph_TD("Trade_percent_of_GDP")
p5 <- graph_TD("Adolescents_out_of_school")
p6 <- graph_TD("Population_15_64")
p8 <- graph_TD("Gross_fixed_capital_formation")
gridExtra::grid.arrange(p1,  p2, p8, ncol = 2)

Les émissions de CO2 augmentent avec le PIB par habitant et la formation brute de capital fixe, mais diminuent avec le taux de mortalité infantile. Aucune tendance claire n’est observée avec la population totale.

gridExtra::grid.arrange(p3, p4, p5, p6,  ncol = 2)

Les émissions de CO2 augmentent avec leValeur ajoutée manufacturière (% du PIB) , Commerce (% du PIB), Pourcentage de la population âgée de 15 à 64 ans . Aucune tendance claire n’est observée avec le Pourcentage d’adolescents non scolarisés.

3.3 Analyse de corrélation et ACP

3.3.1 Matrice des corrélations

# La variable dépendante est Emission de CO2 
Emission %>% 
  cor() %>%
  corrplot::corrplot( tl.cex = 0.5, tl.col = "black", diag = F, type="upper" )

La matrice de corrélation révèle des liens significatifs entre les indicateurs utilisés pour notre analyse. Ce graphique nous permet de constater que PIB par habitant est la variable de notre modèle la plus corrélé aux émission de \(CO²\) mais également que celui-ci est fortement corrélé au pourcentage d’adolescent déscolarisé, au pourcentage de mortalité enfantile et au pourcentage du commerce dans le PIB. Deux de ces variables (pourcentage d’adolescent déscolarisé; pourcentage de mortalité enfantile) sont également très liées linéairement. Tout cela suggère la présence d’endogénéïte entre les émissions de \(CO²\) et le PIB par habitant et de multicolinéarité entre les variables choisit dans notre modèle.

3.3.2 Analyse en composantes principales

Au-delà de trois dimension, il est assez compliqué de visualiser graphiquement la relation que peuvent avoir plusieurs variable. On va donc passer par l’analyse factorielle des correspondence qui pourra nous permettre de déceler les variables qui se ressemble et les pays qui se ressemblent,et ceux qui sont opposé.

3.3.3 Représentation des variables

# Réalisation de l'ACP
PCA(Emission, scale.unit = TRUE, quanti.sup = c("Emissions_CO2"), graph = FALSE) %>%
  plot( choix = "var")

L’analyse des deux premieres composantes principales est limité de part la quantité d’information restreinte qu’elle nous renvoie, cependant nous pouvons tout de même constater, en accord avec la matrice de corrélation, que le pourcentage d’adolescent déscolarisé et le pourcentage de mortalité enfantile sont fortement colinéaire. Elle met aussi en avant le lien qu’ils ont avec le pourcentage de la population agé de 15 à 64 ans.

4 Problème d’endogénéïté

4.1 Spécification du modèle

Dans un premier temps nous chercherons confirmer l’hypothèse d’endogénéïté entre les émissions de \(CO²\) et le PIB par habitant que nous avons présentit en introduction. Nous commençons par définir un modèle naïf par la méthode des MCO avec l’ensemble de nos variables que l’on comparera avec la méthode des doubles moindres carrés. Cela nous permettera de relever les problèmes d’endogénéïté car on sait que les 2MCO sont moins efficaces que les OLS quand les variables explicatives sont toutes exogènes.

#Estimation par MCO : Sans les variables instrumentales 
modele_mco <- Emission %>% select(-Adolescents_out_of_school, -Trade_percent_of_GDP, -Mortality_rate) %>%
  lm(Emissions_CO2~., data=.)

#Estimation par 2MCO : Avec les instruments Adolescents_out_of_school, Trade_percent_of_GDP, Mortality_rate
modele_double_mco <- ivreg( Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP + Gross_fixed_capital_formation + Population_15_64 | Mortality_rate + Manufacturing_percent_of_GDP + Adolescents_out_of_school + Population_15_64 + Trade_percent_of_GDP + Gross_fixed_capital_formation,  data=Emission)
stargazer(modele_mco, modele_double_mco, type='text', title = "Résumé des différents modèles")

Résumé des différents modèles
=================================================================
                                      Dependent variable:        
                              -----------------------------------
                                         Emissions_CO2           
                                       OLS           instrumental
                                                       variable  
                                       (1)               (2)     
-----------------------------------------------------------------
GDP_per_capita                      0.0001***         0.0001***  
                                    (0.00001)         (0.00002)  
                                                                 
Population_15_64                     0.201***          0.238***  
                                     (0.068)           (0.073)   
                                                                 
Gross_fixed_capital_formation        0.098**           0.105**   
                                     (0.041)           (0.042)   
                                                                 
Manufacturing_percent_of_GDP          -0.027            -0.019   
                                     (0.051)           (0.052)   
                                                                 
Constant                            -12.938***        -15.032*** 
                                     (4.293)           (4.547)   
                                                                 
-----------------------------------------------------------------
Observations                            95                95     
R2                                    0.508             0.492    
Adjusted R2                           0.486             0.469    
Residual Std. Error (df = 90)         2.668             2.711    
F Statistic                   23.197*** (df = 4; 90)             
=================================================================
Note:                                 *p<0.1; **p<0.05; ***p<0.01

Résumé des résultats

Modèle(1)

  • PIB par habitant (GDP_per_capita) : Le coefficient est significatif et positif, ce qui suggère qu’une augmentation du PIB par habitant est associée à une augmentation des émissions de CO2.
  • Pourcentage de la population âgée de 15 à 64 ans (Population_15_64) : Le coefficient est significatif et positif, indiquant que les pays avec une plus grande proportion de la population(15-65) tendent à avoir des émissions de CO2 plus élevées.
  • Formation brute de capital fixe (Gross_fixed_capital_formation) : Le coefficient est significatif et positif, ce qui implique que des niveaux plus élevés de formation brute de capital fixe sont associés à des émissions de CO2 plus élevées.
  • Pourcentage de la valeur ajoutée manufacturière dans le PIB (Manufacturing_percent_of_GDP) : Le coefficient n’est pas significatif à un niveau de confiance de 95%, ce qui suggère qu’il n’y a pas de relation claire entre la part de la valeur ajoutée manufacturière dans le PIB et les émissions de CO2.

L’estimation par les MCO donne des résultats possiblement biaisé si l’on a bien un problème d’endogénéïté. Il faut donc mettre en place un modèle avec les méthodes des doubles moindres carrés.

Modèle IV (2)

Les coefficients pour les variables explicatives sont similaires à ceux du modèle OLS en termes de signe et de magnitude. En utilisant les instruments pour traiter l’endogénéité, les coefficients restent significatifs et leur interprétation reste similaire au modèle 1.

Comparaison des modèles

Les R² ajustés sont similaires entre les deux modèles, indiquant qu’ils expliquent chacun environ 47-49% de la variance des émissions de CO2. Les erreurs-types résiduelles sont similaires entre les deux modèles, suggérant que l’ajout d’instruments n’a pas beaucoup affecté la précision des estimations. Le test F pour l’ensemble de la régression est significatif dans les deux cas, indiquant que les modèles sont statistiquement significatifs dans l’ensemble.

En résumé, les résultats des deux modèles montrent que le PIB par habitant, la proportion de la population en âge de travailler et la formation brute de capital fixe sont des déterminants importants des émissions de CO2. L’utilisation de variables instrumentales dans le deuxième modèle confirme ces résultats et permet de traiter l’endogénéité potentielle.

summary( modele_double_mco, diagnostics=TRUE)

Call:
ivreg(formula = Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP + 
    Gross_fixed_capital_formation + Population_15_64 | Mortality_rate + 
    Manufacturing_percent_of_GDP + Adolescents_out_of_school + 
    Population_15_64 + Trade_percent_of_GDP + Gross_fixed_capital_formation, 
    data = Emission)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.0069 -1.5119 -0.5604  1.0369 11.3112 

Coefficients:
                                Estimate Std. Error t value Pr(>|t|)    
(Intercept)                   -1.503e+01  4.547e+00  -3.306 0.001362 ** 
GDP_per_capita                 7.058e-05  2.002e-05   3.526 0.000667 ***
Manufacturing_percent_of_GDP  -1.909e-02  5.242e-02  -0.364 0.716578    
Gross_fixed_capital_formation  1.050e-01  4.218e-02   2.490 0.014625 *  
Population_15_64               2.384e-01  7.318e-02   3.258 0.001586 ** 

Diagnostic tests:
                 df1 df2 statistic  p-value    
Weak instruments   3  88    27.502 1.22e-12 ***
Wu-Hausman         1  89     2.789   0.0984 .  
Sargan             2  NA     4.344   0.1140    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.711 on 90 degrees of freedom
Multiple R-Squared: 0.4917, Adjusted R-squared: 0.4691 
Wald test: 14.19 on 4 and 90 DF,  p-value: 5.126e-09 

4.2 Weak instrument

GDP_FRM <- lm(GDP_per_capita  ~ Mortality_rate + 
    Manufacturing_percent_of_GDP + Adolescents_out_of_school + 
    Population_15_64 + Trade_percent_of_GDP + Gross_fixed_capital_formation,  data=Emission)

GDP_FRMC <- lm(GDP_per_capita  ~ Manufacturing_percent_of_GDP + 
    Gross_fixed_capital_formation + Population_15_64,  data=Emission)

anova(GDP_FRMC, GDP_FRM)
Analysis of Variance Table

Model 1: GDP_per_capita ~ Manufacturing_percent_of_GDP + Gross_fixed_capital_formation + 
    Population_15_64
Model 2: GDP_per_capita ~ Mortality_rate + Manufacturing_percent_of_GDP + 
    Adolescents_out_of_school + Population_15_64 + Trade_percent_of_GDP + 
    Gross_fixed_capital_formation
  Res.Df        RSS Df  Sum of Sq      F    Pr(>F)    
1     91 3.7888e+10                                   
2     88 1.9555e+10  3 1.8334e+10 27.502 1.219e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Le test de weak instrument indique que les variables taux de mortalité enfantile, ratio commerce/PIB et pourcentage d’adolescent descolarisé sont de bons instruments car ils sont corrélés à la variable PIB par tête. On teste alors la pertinance de l’estimateur des doubles MCO.

4.3 Test de Hausman-Wu

residu = residuals(GDP_FRM)
Wu_Hausman <- lm(Emissions_CO2 ~  GDP_per_capita + Manufacturing_percent_of_GDP + Gross_fixed_capital_formation + Population_15_64 + residu, data = Emission)

summary(Wu_Hausman)

Call:
lm(formula = Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP + 
    Gross_fixed_capital_formation + Population_15_64 + residu, 
    data = Emission)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.2486 -1.3542 -0.3670  0.7081  9.8651 

Coefficients:
                                Estimate Std. Error t value Pr(>|t|)    
(Intercept)                   -1.503e+01  4.432e+00  -3.392 0.001037 ** 
GDP_per_capita                 7.058e-05  1.951e-05   3.618 0.000492 ***
Manufacturing_percent_of_GDP  -1.909e-02  5.109e-02  -0.374 0.709520    
Gross_fixed_capital_formation  1.050e-01  4.110e-02   2.555 0.012328 *  
Population_15_64               2.384e-01  7.132e-02   3.343 0.001215 ** 
residu                         4.536e-05  2.716e-05   1.670 0.098399 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.642 on 89 degrees of freedom
Multiple R-squared:  0.5226,    Adjusted R-squared:  0.4958 
F-statistic: 19.48 on 5 and 89 DF,  p-value: 4.655e-13

Le test d’Hausman confirme notre hypothèse initial d’endogénéïté dans le modèle.

Le test de Sargan renvoie une p-value supérieur à 5% alors nos variables instrumental ne sont pas corrélés aux résidus.

5 Traitement de la multicolinéarité

Nous avons vu dans la partie “Analyse descriptive des données” que certains couples de variables dont le pourcentage de mortalité et le pourcentage d’adolescent déscolarisé ont un coefficient de corrélation élevé. Les résultats des estimations obtenu par la méthode des moidres carrés sont très sensibles au moindre changement des variables explicatives.Ils sont instables et donc difficiles à interpréter, il est donc nécessaire de traiter ce problème.

Avec le facteur d’inflation de la variance nous allons déterminer pour un seuil de 3 les variables qui ont une forte relation linéaire avec les autres régresseurs.

modele = lm(Emissions_CO2~., data = Emission)

# Calculer les facteurs d'inflation de la variance (VIF)
vif_values = vif(modele)
vif_values_sqrt = sqrt(vif_values)

# Afficher les valeurs VIF
print("Valeurs VIF :")
## [1] "Valeurs VIF :"
print(vif_values[which(vif_values>=5)])
## named numeric(0)

Le VIF nous indique qu’aucune de nos variables ne semble corrélé entre elles, en effet les VIF caclulés sont tous inférieur à 5.

mat_corr = cor(Emission)
mat_corr^2 > 0.8
                              GDP_per_capita Emissions_CO2
GDP_per_capita                          TRUE         FALSE
Emissions_CO2                          FALSE          TRUE
Adolescents_out_of_school              FALSE         FALSE
Population_15_64                       FALSE         FALSE
Mortality_rate                         FALSE         FALSE
Gross_fixed_capital_formation          FALSE         FALSE
Manufacturing_percent_of_GDP           FALSE         FALSE
Trade_percent_of_GDP                   FALSE         FALSE
                              Adolescents_out_of_school Population_15_64
GDP_per_capita                                    FALSE            FALSE
Emissions_CO2                                     FALSE            FALSE
Adolescents_out_of_school                          TRUE            FALSE
Population_15_64                                  FALSE             TRUE
Mortality_rate                                    FALSE            FALSE
Gross_fixed_capital_formation                     FALSE            FALSE
Manufacturing_percent_of_GDP                      FALSE            FALSE
Trade_percent_of_GDP                              FALSE            FALSE
                              Mortality_rate Gross_fixed_capital_formation
GDP_per_capita                         FALSE                         FALSE
Emissions_CO2                          FALSE                         FALSE
Adolescents_out_of_school              FALSE                         FALSE
Population_15_64                       FALSE                         FALSE
Mortality_rate                          TRUE                         FALSE
Gross_fixed_capital_formation          FALSE                          TRUE
Manufacturing_percent_of_GDP           FALSE                         FALSE
Trade_percent_of_GDP                   FALSE                         FALSE
                              Manufacturing_percent_of_GDP Trade_percent_of_GDP
GDP_per_capita                                       FALSE                FALSE
Emissions_CO2                                        FALSE                FALSE
Adolescents_out_of_school                            FALSE                FALSE
Population_15_64                                     FALSE                FALSE
Mortality_rate                                       FALSE                FALSE
Gross_fixed_capital_formation                        FALSE                FALSE
Manufacturing_percent_of_GDP                          TRUE                FALSE
Trade_percent_of_GDP                                 FALSE                 TRUE

Le test sur le carré des coefficients de corrélation sont tous inférieur à 0.8, on accord avec le VIF, on ne suspecte pas de problème de multicolinéarité.

#Si le carré du coefficient de corrélation est supérieur au R^2, on peut soupçonner de la colinéarité.
mat_corr^2 > summary(modele)$r.squared
                              GDP_per_capita Emissions_CO2
GDP_per_capita                          TRUE         FALSE
Emissions_CO2                          FALSE          TRUE
Adolescents_out_of_school              FALSE         FALSE
Population_15_64                       FALSE         FALSE
Mortality_rate                         FALSE         FALSE
Gross_fixed_capital_formation          FALSE         FALSE
Manufacturing_percent_of_GDP           FALSE         FALSE
Trade_percent_of_GDP                   FALSE         FALSE
                              Adolescents_out_of_school Population_15_64
GDP_per_capita                                    FALSE            FALSE
Emissions_CO2                                     FALSE            FALSE
Adolescents_out_of_school                          TRUE            FALSE
Population_15_64                                  FALSE             TRUE
Mortality_rate                                     TRUE            FALSE
Gross_fixed_capital_formation                     FALSE            FALSE
Manufacturing_percent_of_GDP                      FALSE            FALSE
Trade_percent_of_GDP                              FALSE            FALSE
                              Mortality_rate Gross_fixed_capital_formation
GDP_per_capita                         FALSE                         FALSE
Emissions_CO2                          FALSE                         FALSE
Adolescents_out_of_school               TRUE                         FALSE
Population_15_64                       FALSE                         FALSE
Mortality_rate                          TRUE                         FALSE
Gross_fixed_capital_formation          FALSE                          TRUE
Manufacturing_percent_of_GDP           FALSE                         FALSE
Trade_percent_of_GDP                   FALSE                         FALSE
                              Manufacturing_percent_of_GDP Trade_percent_of_GDP
GDP_per_capita                                       FALSE                FALSE
Emissions_CO2                                        FALSE                FALSE
Adolescents_out_of_school                            FALSE                FALSE
Population_15_64                                     FALSE                FALSE
Mortality_rate                                       FALSE                FALSE
Gross_fixed_capital_formation                        FALSE                FALSE
Manufacturing_percent_of_GDP                          TRUE                FALSE
Trade_percent_of_GDP                                 FALSE                 TRUE

Enfin , aucun carré des coefficients de corrélation n’est supérieur au \(R^2\). Nous pouvons donc conclure qu’il n’y a pas de problème de multicolinéarité entre nos variables.

5.1 Méthode en grande dimension

Bien que les vérifications effectuées sur la présence de la multicolinéarité sont retournées nulles, nous avons tout de même constaté un lien linéaire entre plusieurs variables lors de l’étude descriptive de nos données. De fait, nous allons donc mettre en place et étudier différente méthode de réduction de dimension puis de pénalisation afin de voir et de discuter de ce qu’il en sort.

5.1.1 PCR

Modélisation et test des performances du modèle

set.seed(500)
pcr_emiss <- pcr(Emissions_CO2~., data=Emission, scale=TRUE, jackknife = TRUE, validation="CV", ncomp=7)
summary(pcr_emiss)
Data:   X dimension: 95 7 
    Y dimension: 95 1
Fit method: svdpc
Number of components considered: 7

VALIDATION: RMSEP
Cross-validated using 10 random segments.
       (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 comps
CV            3.74    2.988    3.008    3.019    3.091    3.090    2.817
adjCV         3.74    2.985    3.002    3.013    3.078    3.075    2.798
       7 comps
CV       2.904
adjCV    2.881

TRAINING: % variance explained
               1 comps  2 comps  3 comps  4 comps  5 comps  6 comps  7 comps
X                43.62    60.58    75.04    85.93    94.14    97.79   100.00
Emissions_CO2    37.96    39.14    39.24    41.50    43.25    54.18    54.58

Après avoir estimer notre modèle de régression en composante principale, l’estimation du risque moyen d’erreur RMSEP par validation croisée nous suggère de retenir les 6 premières composantes avec une RMSEP = 2.798 pour notre modèle PCR final. Ainsi, nous retrouvons que notre modèle finale à 6 composantes explique 97.79% de la variance.

explvar(pcr_emiss)
   Comp 1    Comp 2    Comp 3    Comp 4    Comp 5    Comp 6    Comp 7 
43.622795 16.958184 14.458173 10.889093  8.215618  3.646174  2.209962 

On constate que les 3 premieres composantes expliquent à elles seules \(\frac{3}{4}\) de la variance.

5.1.2 PLS

Modélisation et test des performances du modèle

pls_emiss <- plsr(Emissions_CO2~., data=Emission, scale=TRUE, jackknife = TRUE,validation="CV")
summary(pls_emiss)
Data:   X dimension: 95 7 
    Y dimension: 95 1
Fit method: kernelpls
Number of components considered: 7

VALIDATION: RMSEP
Cross-validated using 10 random segments.
       (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 comps
CV            3.74    2.972    2.953    2.884    2.829    2.832    2.830
adjCV         3.74    2.966    2.932    2.863    2.811    2.815    2.812
       7 comps
CV       2.831
adjCV    2.814

TRAINING: % variance explained
               1 comps  2 comps  3 comps  4 comps  5 comps  6 comps  7 comps
X                43.23    53.88    64.30    74.35    83.70    92.69   100.00
Emissions_CO2    42.22    50.97    53.93    54.54    54.57    54.58    54.58

Pour le modèle de régression des moindres carrés partiels, l’estimation du risque moyen d’erreur RMSEP par validation croisée nous suggère de retenir les 4 premières composantes avec une RMSE = 2.811 pour notre modèle PLS final. Ainsi, nous retrouvons que notre modèle finale à 4 composantes explique 74.35% de la variance.

5.1.3 Conclusion

Pour la réduction de dimension, suivant le principe de parcimonie, la méthode la plus efficace est la régression des moindres carrés partiels qui nous renvoie un modèle faisait un nombre d’erreur équivalent à celui du modèle obtenus par la régression sur composantes principales mais avec un nombre de paramètre plus faible. A savoir, une RMSE de 2.81 pour la methode PLS et une RMSE d’environ 2.8.

Coefficient estimée

#Coefficient variable centré réduite
coeff_pls = coefficients(pls_emiss, ncomp=4)
#Ecart-type variable initiale
sd_var = Emission %>% select(GDP_per_capita, Adolescents_out_of_school, Population_15_64,
                    Mortality_rate, Gross_fixed_capital_formation, Manufacturing_percent_of_GDP,
                    Trade_percent_of_GDP) %>% map(sd) %>% as.data.frame() %>% t()
#Coefficient variable initiale
coeff_var_init = merge(coeff_pls,sd_var,by="row.names") %>% 
  mutate(coeff = `Emissions_CO2.4 comps`/V1) %>% select(Row.names, coeff)

coeff_var_init
                      Row.names         coeff
1     Adolescents_out_of_school  0.0178081219
2                GDP_per_capita  0.0001157846
3 Gross_fixed_capital_formation  0.1066540704
4  Manufacturing_percent_of_GDP -0.0300510416
5                Mortality_rate -0.0114335914
6              Population_15_64  0.2309863282
7          Trade_percent_of_GDP -0.0144371762

Interprétation des coefficients

coefplot(pls_emiss, ncomp=4, se.whiskers = TRUE, labels = prednames(pls_emiss), cex.axis = 0.5)

La variabilité des coefficients estimés par validation croisée pour le PIB par habitant (GDP_per_capita) est très forte, et donc l’estimation du coefficient associé ne semble pas pertinente, contrairement à l’ensemble des autres variables. De plus, pour la part d’adolescents déscolarisés (Adolescents_out_of_school), le taux de mortalité (Mortality_rate) et la part de la production manufacturière dans le PIB (Manufacturing_percent_of_GDP), il n’est pas totalement certain que ces variables soient différentes de 0. En revanche, la part de la population âgée entre 15 et 64 ans, la FBCF et la part du commerce extérieur dans le PIB semblent significatives et plus précises.

Ainsi, nous pouvons dire avec un certain degré de confiance toutes choses égale par ailleurs, qu’une variation d’un point de pourcentage de la part de population agées entre 15 et 64 ans entrainera une augmentation de 0.23 des tonnes de \(CO²\) émis par habitant, qu’une variation d’une unité de la FBCF entrainera une augmentation de 0.1 d’émission de tonnes de \(CO²\) par habitant, qu’une variation d’un point de pourcentage de la part du commerce extérieur dans le PIB entrainera une diminution de -0.014 des tonnes de \(CO²\) émis par habitant.

5.2 Méthode de pénalisation

Le nombre de varaible est une mesure de la complexité des algorithmes linéaires, afin d’éviter les biais de sur-apprentissage il est essentiel de le controler. Pour cela, nous allons utiliser la méthode de regression Elastic Net qui combine les méthodes de régression Ridge et Lasso à travers un paramètre lambda donnant plus ou moins de poids à l’une des méthodes par rapport à l’autre.

5.2.1 Elastic net

Entrainement du modèle

model1$results %>% arrange(RMSE) %>% slice(1)
  alpha lambda     RMSE  Rsquared      MAE   RMSESD RsquaredSD     MAESD
1     0      0 2.730046 0.6335079 2.046694 1.002412  0.2207046 0.6383098

Après avoir entrainé plusieurs modèle de régression Elastic Net pour un ensemble de paramètres \(\alpha \in [0,1]\) avec un pas de 0.05 et \(\lambda \in [0,10]\) avec un pas de \(\frac{11}{10}\), celui qui minimise l’erreur de prévision estimé à partir de la validation croisée est le modèle avec comme paramètres \(\alpha = 0.315\) et \(\lambda = 1.05\) avec une RMSE = 2.533. Plus faible que celle obtenu par la méthode PLS.

plot(varImp(model1))

Pour ce modèle, les variables les plus pertinentes sont la FBCF, qui mesure les dépenses totales du pays consacrées à la production de capital fixe, le taux de mortalité, susceptible de varier en fonction des conditions de vie des habitants (par exemple : pollution de l’air, accès aux soins, etc…), ainsi que la proportion d’adolescents déscolarisés, liée à l’insertion professionnelle précoce des jeunes dans le secteur de l’industrie dans les pays du Sud.

6 Double machine learning

6.1 Instanciation et ajustement du modèle DoubleMLPLR

# Transformation des variables catégorielles en variables numériques (si nécessaire)
dummy <- dummyVars(" ~ .", data = Emission)
Emission <- data.frame(predict(dummy, newdata = Emission))

doubleml_data <- double_ml_data_from_data_frame(Emission,
                                                y_col = "Emissions_CO2",
                                                d_cols = "GDP_per_capita",
                                                x_cols = c("Population_15_64", "Manufacturing_percent_of_GDP"))


# Configuration des learners pour les composantes du modèle
ml_gdp = lrn("regr.cv_glmnet", s = "lambda.min")
ml_pop = lrn("regr.cv_glmnet", s = "lambda.min")


# Création de l'objet DoubleMLPLR
doubleml_plr = DoubleMLPLR$new(doubleml_data, ml_gdp, ml_pop)
doubleml_plr$fit()
## INFO  [21:00:36.503] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/5)
## INFO  [21:00:36.604] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/5)
## INFO  [21:00:36.657] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/5)
## INFO  [21:00:36.973] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 4/5)
## INFO  [21:00:37.018] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 5/5)
## INFO  [21:00:37.235] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 1/5)
## INFO  [21:00:37.279] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 2/5)
## INFO  [21:00:37.328] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 3/5)
## INFO  [21:00:37.388] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 4/5)
## INFO  [21:00:37.432] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 5/5)
doubleml_plr$summary()
## Estimates and significance testing of the effect of target variables
##                Estimate. Std. Error t value Pr(>|t|)    
## GDP_per_capita 9.640e-05  1.632e-05   5.908 3.46e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

L’analyse du Double Machine Learning montre que l’augmentation du PIB par habitant est positivement associée à une augmentation des émissions de CO2 (effet causale). Avec chaque unité supplémentaire de PIB par habitant, les émissions de CO2 augmentent de 0.00009829 unités. Cette relation est statistiquement très significative, indiquant que le développement économique, tel que mesuré par le PIB, peut contribuer à une augmentation des émissions, ce qui pose d’importantes questions sur les impacts environnementaux de la croissance économique.

6.2 Bootstrap , intervalle de confiance et ajustement des p-values

doubleml_plr$bootstrap(method = "normal", n_rep_boot = 1000)

# Intervalles de confiance simultanés
doubleml_plr$confint(joint = TRUE)
##                       2.5 %       97.5 %
## GDP_per_capita 6.462952e-05 0.0001281637
# Ajustement des p-valeurs
doubleml_plr$p_adjust(method = "romano-wolf")
##                  Estimate. pval
## GDP_per_capita 9.63966e-05    0
doubleml_plr$p_adjust(method = "bonferroni")
##                  Estimate.         pval
## GDP_per_capita 9.63966e-05 3.459743e-09

Les résultats montrent clairement que l’effet du PIB par habitant sur les émissions de CO2 est statistiquement significatif et robuste. Les intervalles de confiance indiquent que cet effet est positivement estimé entre environ 0.0000626 et 0.0001282. Même après des ajustements rigoureux pour le contrôle des erreurs multiples via les méthodes de Romano-Wolf et de Bonferroni, l’impact significatif du PIB par habitant sur les émissions reste extrêmement faible en termes de p-valeur. Ces analyses confirment que l’augmentation du PIB par habitant est associée à une hausse des émissions de CO2, mettant en lumière l’importance des considérations environnementales dans les politiques de croissance économique.

7 Annexe

  • Partie 1 Introduction et présentation du sujet : Emmarius 100%
  • Partie 2 Collecte et traitement des données : Emmarius 100%
  • Partie 3 Analyse descriptive des données : Mohamed 75% (code, commentaire) Emmarius 25% (commentaire)
  • Parite 4 Problème d’endogénéïté : Emmarius 50% (specification du modele, test, commentaire) Mohamed 50% (specification du modele, test, commentaire)
  • Partie 5 Traitement de la multicolinéarité : Emmarius 100%
  • Partie 6 Double machine learning : Mohamed 100%